export function fromCallback(fn) {
    return Object.defineProperty(
        function (...args) {
            if(typeof args[args.length - 1] === "function"){
                fn.apply(this,args);
            }else{
                return new Promise((resolve,reject) =>{
                    fn.call(this,...args,(err,res)=>{
                        err != null?reject(err):resolve(res);
                    });
                });
            }
        },
        "name",
        {value:fn.name}
    );
}

export function fromPromise(fn){
    return Object.defineProperty(
        function (...args) {
            const cb = args[args.length -1];
            if(typeof cb !== "function") return fn.apply(this,args);
            else fn.apply(this,args.slice(0,-1)).then((r)=> cb(null,r),cb)
        },
        "name",
        {value:fn.name}
    );
}